curl --request POST \
--url https://qa.esectra.com/v1/verifications \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"document": {
"image_base64": "<string>",
"expires_at": "<string>",
"extracted_fields": {},
"issuing_country": "<string>",
"number_last4": "<string>"
},
"selfie_image_base64": "<string>",
"subject_id": "<string>"
}
'import requests
url = "https://qa.esectra.com/v1/verifications"
payload = {
"document": {
"image_base64": "<string>",
"expires_at": "<string>",
"extracted_fields": {},
"issuing_country": "<string>",
"number_last4": "<string>"
},
"selfie_image_base64": "<string>",
"subject_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
document: {
image_base64: '<string>',
expires_at: '<string>',
extracted_fields: {},
issuing_country: '<string>',
number_last4: '<string>'
},
selfie_image_base64: '<string>',
subject_id: '<string>'
})
};
fetch('https://qa.esectra.com/v1/verifications', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://qa.esectra.com/v1/verifications",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'document' => [
'image_base64' => '<string>',
'expires_at' => '<string>',
'extracted_fields' => [
],
'issuing_country' => '<string>',
'number_last4' => '<string>'
],
'selfie_image_base64' => '<string>',
'subject_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://qa.esectra.com/v1/verifications"
payload := strings.NewReader("{\n \"document\": {\n \"image_base64\": \"<string>\",\n \"expires_at\": \"<string>\",\n \"extracted_fields\": {},\n \"issuing_country\": \"<string>\",\n \"number_last4\": \"<string>\"\n },\n \"selfie_image_base64\": \"<string>\",\n \"subject_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://qa.esectra.com/v1/verifications")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"document\": {\n \"image_base64\": \"<string>\",\n \"expires_at\": \"<string>\",\n \"extracted_fields\": {},\n \"issuing_country\": \"<string>\",\n \"number_last4\": \"<string>\"\n },\n \"selfie_image_base64\": \"<string>\",\n \"subject_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://qa.esectra.com/v1/verifications")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"document\": {\n \"image_base64\": \"<string>\",\n \"expires_at\": \"<string>\",\n \"extracted_fields\": {},\n \"issuing_country\": \"<string>\",\n \"number_last4\": \"<string>\"\n },\n \"selfie_image_base64\": \"<string>\",\n \"subject_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"created_at": "<string>",
"evidence": [
{
"id": "<string>",
"kind": "IMAGE",
"location": "<string>",
"retention_policy": "<string>"
}
],
"reasons": [
{
"code": "<string>",
"message": "<string>"
}
],
"status": "APPROVED",
"subject_id": "<string>",
"verification_id": "<string>",
"decision": "ALLOW",
"decision_id": "<string>",
"distance": 123,
"document": {
"document_type": "PASSPORT",
"evidence": [
{
"id": "<string>",
"kind": "IMAGE",
"location": "<string>",
"retention_policy": "<string>"
}
],
"extracted_fields": {},
"extraction_status": "EXTRACTED",
"expires_at": "<string>",
"issuing_country": "<string>",
"number_last4": "<string>"
},
"model_version": "<string>",
"review_case_id": "<string>",
"review_status": "PENDING",
"risk_level": "LOW"
}{
"created_at": "<string>",
"evidence": [
{
"id": "<string>",
"kind": "IMAGE",
"location": "<string>",
"retention_policy": "<string>"
}
],
"reasons": [
{
"code": "<string>",
"message": "<string>"
}
],
"status": "APPROVED",
"subject_id": "<string>",
"verification_id": "<string>",
"decision": "ALLOW",
"decision_id": "<string>",
"distance": 123,
"document": {
"document_type": "PASSPORT",
"evidence": [
{
"id": "<string>",
"kind": "IMAGE",
"location": "<string>",
"retention_policy": "<string>"
}
],
"extracted_fields": {},
"extraction_status": "EXTRACTED",
"expires_at": "<string>",
"issuing_country": "<string>",
"number_last4": "<string>"
},
"model_version": "<string>",
"review_case_id": "<string>",
"review_status": "PENDING",
"risk_level": "LOW"
}Handles `POST /v1/verifications`.
Errors
Returns 401 without usable credentials, 400 for undecodable images,
422 when an image cannot be evaluated or the document is unusable, and
500 when a store fails. A repeated Idempotency-Key returns 200 with
the original verification.
curl --request POST \
--url https://qa.esectra.com/v1/verifications \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"document": {
"image_base64": "<string>",
"expires_at": "<string>",
"extracted_fields": {},
"issuing_country": "<string>",
"number_last4": "<string>"
},
"selfie_image_base64": "<string>",
"subject_id": "<string>"
}
'import requests
url = "https://qa.esectra.com/v1/verifications"
payload = {
"document": {
"image_base64": "<string>",
"expires_at": "<string>",
"extracted_fields": {},
"issuing_country": "<string>",
"number_last4": "<string>"
},
"selfie_image_base64": "<string>",
"subject_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
document: {
image_base64: '<string>',
expires_at: '<string>',
extracted_fields: {},
issuing_country: '<string>',
number_last4: '<string>'
},
selfie_image_base64: '<string>',
subject_id: '<string>'
})
};
fetch('https://qa.esectra.com/v1/verifications', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://qa.esectra.com/v1/verifications",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'document' => [
'image_base64' => '<string>',
'expires_at' => '<string>',
'extracted_fields' => [
],
'issuing_country' => '<string>',
'number_last4' => '<string>'
],
'selfie_image_base64' => '<string>',
'subject_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://qa.esectra.com/v1/verifications"
payload := strings.NewReader("{\n \"document\": {\n \"image_base64\": \"<string>\",\n \"expires_at\": \"<string>\",\n \"extracted_fields\": {},\n \"issuing_country\": \"<string>\",\n \"number_last4\": \"<string>\"\n },\n \"selfie_image_base64\": \"<string>\",\n \"subject_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://qa.esectra.com/v1/verifications")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"document\": {\n \"image_base64\": \"<string>\",\n \"expires_at\": \"<string>\",\n \"extracted_fields\": {},\n \"issuing_country\": \"<string>\",\n \"number_last4\": \"<string>\"\n },\n \"selfie_image_base64\": \"<string>\",\n \"subject_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://qa.esectra.com/v1/verifications")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"document\": {\n \"image_base64\": \"<string>\",\n \"expires_at\": \"<string>\",\n \"extracted_fields\": {},\n \"issuing_country\": \"<string>\",\n \"number_last4\": \"<string>\"\n },\n \"selfie_image_base64\": \"<string>\",\n \"subject_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"created_at": "<string>",
"evidence": [
{
"id": "<string>",
"kind": "IMAGE",
"location": "<string>",
"retention_policy": "<string>"
}
],
"reasons": [
{
"code": "<string>",
"message": "<string>"
}
],
"status": "APPROVED",
"subject_id": "<string>",
"verification_id": "<string>",
"decision": "ALLOW",
"decision_id": "<string>",
"distance": 123,
"document": {
"document_type": "PASSPORT",
"evidence": [
{
"id": "<string>",
"kind": "IMAGE",
"location": "<string>",
"retention_policy": "<string>"
}
],
"extracted_fields": {},
"extraction_status": "EXTRACTED",
"expires_at": "<string>",
"issuing_country": "<string>",
"number_last4": "<string>"
},
"model_version": "<string>",
"review_case_id": "<string>",
"review_status": "PENDING",
"risk_level": "LOW"
}{
"created_at": "<string>",
"evidence": [
{
"id": "<string>",
"kind": "IMAGE",
"location": "<string>",
"retention_policy": "<string>"
}
],
"reasons": [
{
"code": "<string>",
"message": "<string>"
}
],
"status": "APPROVED",
"subject_id": "<string>",
"verification_id": "<string>",
"decision": "ALLOW",
"decision_id": "<string>",
"distance": 123,
"document": {
"document_type": "PASSPORT",
"evidence": [
{
"id": "<string>",
"kind": "IMAGE",
"location": "<string>",
"retention_policy": "<string>"
}
],
"extracted_fields": {},
"extraction_status": "EXTRACTED",
"expires_at": "<string>",
"issuing_country": "<string>",
"number_last4": "<string>"
},
"model_version": "<string>",
"review_case_id": "<string>",
"review_status": "PENDING",
"risk_level": "LOW"
}Authorizations
A tenant API key. Acts for exactly one tenant and cannot conclude a case, because a conclusion records a person.
Body
Response
A replayed Idempotency-Key; the original verification
Verification response body.
RFC 3339 creation timestamp.
References to retained evidence.
Show child attributes
Show child attributes
Explanation reasons.
Show child attributes
Show child attributes
Outcome status.
APPROVED, REVIEW_REQUIRED, REJECTED, FAILED Tenant's customer.
Verification identifier.
Decision outcome.
ALLOW, WARN, BLOCK, HOLD, REVIEW_REQUIRED, FLAG, BLOCK_RECOMMENDED, SUSPEND, END_STREAM Decision record identifier.
Face-match distance, when the provider produced one.
Document metadata, without the image itself.
Show child attributes
Show child attributes
Model or vendor version behind the score.
Manual-review case, when the outcome needs a human.
Review lifecycle state.
PENDING, APPROVED, OVERTURNED, NOT_REQUIRED Explainable risk level.
LOW, MEDIUM, HIGH, CRITICAL 
